package br.com.localfloripa.entities;

import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Transient;

@Entity
@DiscriminatorValue(value="I")
public class Imovel extends Anuncio {

	private static final long serialVersionUID = -1735031458740968984L;
	
	@Enumerated(EnumType.STRING)
	@Column(name="proprietario",nullable=false)
	private Proprietario proprietario;
	@Column(name="dormitorios",nullable=true)
	private Integer dormitorios;
	@Column(name="garagens",nullable=true)
	private Integer garagens;		
	@Column(name="banheiros",nullable=true)
	private Integer banheiros;
	@Column(name="suites",nullable=true)
	private Integer suites;
	@Enumerated(EnumType.STRING)
	@Column(name="tp_negociacao",nullable=true)
	private TipoNegociacao tipoNegociacao;
	@Column(name="preco",nullable=true)
	private Double preco;
	@Column(name="area_util",nullable=true)
	private Integer areaUtil;
	@OneToOne(optional=true,fetch=FetchType.LAZY)
	@JoinColumn(name="subcategoria_id")
	private SubCategoria subCategoria;
	
	public Imovel() {
		this.subCategoria = new SubCategoria();
	}

	public Proprietario getProprietario() {
		return proprietario;
	}

	public void setProprietario(Proprietario proprietario) {
		this.proprietario = proprietario;
	}

	public Integer getDormitorios() {
		return dormitorios;
	}

	public void setDormitorios(Integer dormitorios) {
		this.dormitorios = dormitorios;
	}

	public Integer getGaragens() {
		return garagens;
	}

	public void setGaragens(Integer garagens) {
		this.garagens = garagens;
	}

	public TipoNegociacao getTipoNegociacao() {
		return tipoNegociacao;
	}

	public void setTipoNegociacao(TipoNegociacao tipoNegociacao) {
		this.tipoNegociacao = tipoNegociacao;
	}
	
	@Transient
	public String getTipoNegociacaoDesc() {
		String desc = "";
		if (this.tipoNegociacao != null)
			desc = this.tipoNegociacao.value();
		return desc;
	}
	
	public Double getPreco() {
		return preco;
	}

	public void setPreco(Double preco) {
		this.preco = preco;
	}

	public SubCategoria getSubCategoria() {
		return subCategoria;
	}

	public void setSubCategoria(SubCategoria subCategoria) {
		this.subCategoria = subCategoria;
	}

	public Integer getBanheiros() {
		return banheiros;
	}

	public void setBanheiros(Integer banheiros) {
		this.banheiros = banheiros;
	}

	public Integer getSuites() {
		return suites;
	}

	public void setSuites(Integer suites) {
		this.suites = suites;
	}

	public Integer getAreaUtil() {
		return areaUtil;
	}

	public void setAreaUtil(Integer areaUtil) {
		this.areaUtil = areaUtil;
	}

	@Transient
	public static Imovel parseAnuncio(Anuncio anuncio) {
		Imovel imovel = new Imovel();
		imovel.setRepresentante(anuncio.getRepresentante());
		imovel.setRamo(anuncio.getRamo());
		imovel.setServico(anuncio.getServico());
		imovel.setContato(anuncio.getContato());
		imovel.setCliente(anuncio.getCliente());
		imovel.setAtivo(anuncio.getAtivo());
		imovel.setDescricao(anuncio.getDescricao());
		imovel.setAlbum(anuncio.getAlbum());
		imovel.setAvaliacoes(anuncio.getAvaliacoes());
		imovel.setReputacaoAtendimento(anuncio.getReputacaoAtendimento());
		imovel.setReputacaoServico(anuncio.getReputacaoServico());
		imovel.setMensagens(anuncio.getMensagens());
		imovel.setAuditorias(anuncio.getAuditorias());
		imovel.setLancamento(anuncio.getLancamento());
		
		return imovel;
	}
	
}
